iT邦幫忙

2024 iThome 鐵人賽

DAY 6
1
Software Development

Unity使用教學系列 第 6

Unity_如何設置 Firebase Realtime Database 的安全規則

  • 分享至 

  • xImage
  •  

前言
Firebase Realtime Database 是一個強大的雲端數據庫,允許開發者輕鬆儲存和同步應用中的資料。不過,在使用這種即時數據庫的同時,確保數據的安全性是至關重要的。隨著應用程式規模的擴大,必須正確設置安全規則,來控制哪些用戶可以讀取和寫入數據。今天將介紹如何設定 Firebase Realtime Database 的安全規則,以確保數據安全和用戶隱私的保護。

1. Firebase Realtime Database 規則語法
Firebase 的安全規則使用類似 JSON 的語法,來控制讀取和寫入操作。每個規則是針對數據庫中的某個路徑定義的。因此,我們可以根據用戶的身份或其他的條件來設置不同的權限。

基本的 Firebase Realtime Database 規則結構:

{
  "rules": {
    ".read": "condition", // 讀取規則
    ".write": "condition" // 寫入規則
  }
}
  • read:用來控制誰可以讀取該數據。
  • write:用來控制誰可以寫入該數據。
  • condition:規則判斷的條件,我們通常使用布爾值來控制是否允許訪問。

2. 根據用戶身份設定訪問權限
2.1 基本用戶身份驗證
在實際應用中,最常見的需求是限制只有登入的用戶才能讀取或寫入數據。我們可以使用 auth 變量來檢查用戶是否已通過 Firebase 身份驗證,並使用 auth.uid 來引用當前用戶的唯一 ID。

允許登入用戶讀取和寫入數據:

{
  "rules": {
    ".read": "auth != null",  // 只有登入的用戶可以讀取數據
    ".write": "auth != null"  // 只有登入的用戶可以寫入數據
  }
}

允許每個用戶只修改自己的數據:
假設我們的數據庫結構中,每個用戶都有自己的數據節點,例如:

{
  "users": {
    "userID_1": {
      "name": "John",
      "age": 30
    },
    "userID_2": {
      "name": "Doe",
      "age": 25
    }
  }
}

我們可以設定規則,使得每個用戶只能修改屬於自己的數據:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",   // 只有當前用戶可以讀取自己的數據
        ".write": "$uid === auth.uid"  // 只有當前用戶可以修改自己的數據
      }
    }
  }
}

這樣,每個用戶只能讀取和修改其 userID 下的數據。

2.2 角色管理
在某些應用場景中,可能需要有管理員和普通用戶。我們可以根據用戶的角色來授予不同的權限,例如允許管理員可以讀取或修改所有數據,而普通用戶只能訪問自己的數據。

首先,我們可以在數據庫中為用戶存儲角色訊息:

{
  "users": {
    "userID_1": {
      "name": "John",
      "role": "admin"
    },
    "userID_2": {
      "name": "Doe",
      "role": "user"
    }
  }
}

接著,設置安全規則:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid || root.child('users/' + auth.uid + '/role').val() === 'admin'",
        ".write": "$uid === auth.uid || root.child('users/' + auth.uid + '/role').val() === 'admin'"
      }
    }
  }
}

root.child('users/' + auth.uid + '/role').val():用來檢查當前用戶的角色是否為管理員 (admin)。
此規則允許用戶只能訪問自己的數據,而管理員則可以訪問所有用戶的數據。

3. 常見錯誤及解決方案

3.1 規則沒有生效
問題描述:
即使設置了規則,某些用戶仍然可以訪問不應該訪問的數據。
解決方案:
確保規則已經正確部署到 Firebase 控制台中。每次修改規則後,必須點擊“發布”按鈕才能生效。
使用 Firebase 的規則模擬器進行測試。這個工具允許我們模擬不同的身份驗證場景,並測試安全規則。

3.2 忘記檢查 auth.uid
問題描述:
用戶可以訪問和修改其他用戶的數據。
解決方案:
如果每個用戶的數據存儲在他們自己的節點下(例如 users/{uid}),必須使用 auth.uid 來檢查用戶身份,確保用戶只能訪問自己的數據。
確保 .write 和 .read 中的條件都明確地限制到當前用戶的 auth.uid。
3.3 角色權限設置錯誤
問題描述:
即使管理員已設置,仍然無法訪問所有數據
解決方案:
確認數據庫中用戶的角色字段是否正確設置。可以通過 Firebase 控制台或規則模擬器來查看每個用戶的角色值。
檢查角色字段的位置是否正確,例如 root.child('users/' + auth.uid + '/role').val() 應該指向角色存儲的路徑。

總結
Firebase Realtime Database 的安全規則是保護應用中數據安全的關鍵。正確使用這些規則可以確保只有授權的用戶可以讀取和修改數據。今天介紹了如何使用 auth.uid 限制用戶訪問自己的數據,並解釋了如何根據用戶角色來授予不同的訪問權限。設置規則時,要記住測試和調整規則,讓安全策略能夠符合應用需求。

如果有其他問題,可以留言討論!


上一篇
Unity_使用 Firebase Realtime Database 建立會員系統
下一篇
Unity_使用 Firebase Cloud Functions 自動化後端操作
系列文
Unity使用教學15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言